package com.fosss.dijkstra;

import java.util.Arrays;

public class VisitedVertex {
    //记录下标处的顶点是否被访问
    public boolean[] visited;
    //记录下标处的顶点的前驱节点
    public int[] pre;
    //记录顶点到其他点的距离
    public int[] distance;

    /**
     * 构造器
     *
     * @param num   顶点的个数
     * @param index 传入的顶点的下标
     */
    public VisitedVertex(int num, int index) {
        this.visited = new boolean[num];
        this.pre = new int[num];
        this.distance = new int[num];
        //初始化
        this.visited[index] = true;//该顶点设置为已访问
        Arrays.fill(distance, Integer.MAX_VALUE);//设置该顶点到其他点的距离为无穷大
        this.distance[index] = 0;//该顶点到自己的距离为零
    }

    /**
     * * 继续选择并返回新的访问顶点，
     * 比如这里的 G 完后，就是 A 点作为新的访问顶点(注意不是出发顶点)
     * @return 返回下一个被访问的顶点
     */
    public int updateArr() {
        int min = 66535, index = 0;
        for (int i = 0; i < visited.length; i++) {
            if (!visited[i] && distance[i] < min) {
                min = distance[i];
                index = i;
            }
        }
        //更新 index 顶点被访问过
        visited[index] = true;
        return index;
    }

    /**
     * 打印
     */
    public void show(){
        System.out.println("各顶点被访问情况："+Arrays.toString(visited));
        System.out.println();
        System.out.println("各顶点的前驱顶点："+Arrays.toString(pre));
        System.out.println();
        System.out.println("出发点到其他顶点的最短路径；"+Arrays.toString(distance));
    }

}

















